package com.googlecode.cswish.annotation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * Tell the exact signatures of a type or field etc (Java doesn't support Object< Type >)
 * <p>
 * 
 * GenericType( List ) <==> Object< List >
 * 
 * @author Jerry.Feng Date: 2008-10-5
 */
@Target({TYPE, FIELD, METHOD, PARAMETER})
@Retention(RUNTIME)
public @interface GenericType {
	// TODO: use Enum
	/**
	 * it means current object is model type, it's dynamic type
	 */
	public static final String MODEL = "GenericType.model";
	/**
	 * it means current object comes from parameter: FrameConstant.PARAM_GENERIC_TYPE
	 */
	public static final String PARAM_MODEL = "GenericType.paramModel";
	
	public String value() default MODEL;
}